package co.edu.dataaccess.daoFactory;

import co.edu.dataaccess.dao.*;


/**
 * Factory for Data Access Objects Strategy The DAO pattern can be made highly flexible
 * by adopting the Abstract Factory [GoF] and the Factory Method [GoF] patterns.
 * When the underlying storage is not subject to change from one implementation to another,
 * this strategy can be implemented using the Factory Method pattern to produce a number of DAOs needed by the application.
 * This class is a Factory Method pattern
 *
 * @author Zathura Code Generator http://code.google.com/p/zathura
 */
public class JPADaoFactory {
    private static JPADaoFactory instance = null;

    private JPADaoFactory() {
    }

    /**
    *
    * @return JPADaoFactory
    */
    public static JPADaoFactory getInstance() {
        if (instance == null) {
            instance = new JPADaoFactory();
        }

        return instance;
    }

    /**
    * This method instantiates the IActividadesDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IActividadesDAO implementation
    */
    public IActividadesDAO getActividadesDAO() {
        return new ActividadesDAO();
    }

    /**
    * This method instantiates the IAmbitosDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IAmbitosDAO implementation
    */
    public IAmbitosDAO getAmbitosDAO() {
        return new AmbitosDAO();
    }

    /**
    * This method instantiates the IClasesDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IClasesDAO implementation
    */
    public IClasesDAO getClasesDAO() {
        return new ClasesDAO();
    }

    /**
    * This method instantiates the ICostosDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ICostosDAO implementation
    */
    public ICostosDAO getCostosDAO() {
        return new CostosDAO();
    }

    /**
    * This method instantiates the ICostosPorProyectoDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ICostosPorProyectoDAO implementation
    */
    public ICostosPorProyectoDAO getCostosPorProyectoDAO() {
        return new CostosPorProyectoDAO();
    }

    /**
    * This method instantiates the IEmpresaDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IEmpresaDAO implementation
    */
    public IEmpresaDAO getEmpresaDAO() {
        return new EmpresaDAO();
    }

    /**
    * This method instantiates the ILenguajesDeprogramacionDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ILenguajesDeprogramacionDAO implementation
    */
    public ILenguajesDeprogramacionDAO getLenguajesDeprogramacionDAO() {
        return new LenguajesDeprogramacionDAO();
    }

    /**
    * This method instantiates the IProyectosDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IProyectosDAO implementation
    */
    public IProyectosDAO getProyectosDAO() {
        return new ProyectosDAO();
    }

    /**
    * This method instantiates the IReglaEnProyectoDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IReglaEnProyectoDAO implementation
    */
    public IReglaEnProyectoDAO getReglaEnProyectoDAO() {
        return new ReglaEnProyectoDAO();
    }

    /**
    * This method instantiates the IReglasDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IReglasDAO implementation
    */
    public IReglasDAO getReglasDAO() {
        return new ReglasDAO();
    }

    /**
    * This method instantiates the ISubactividadDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ISubactividadDAO implementation
    */
    public ISubactividadDAO getSubactividadDAO() {
        return new SubactividadDAO();
    }

    /**
    * This method instantiates the ISubactividadPorActividadDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ISubactividadPorActividadDAO implementation
    */
    public ISubactividadPorActividadDAO getSubactividadPorActividadDAO() {
        return new SubactividadPorActividadDAO();
    }

    /**
    * This method instantiates the ITaxonomiaDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ITaxonomiaDAO implementation
    */
    public ITaxonomiaDAO getTaxonomiaDAO() {
        return new TaxonomiaDAO();
    }

    /**
    * This method instantiates the ITiposDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return ITiposDAO implementation
    */
    public ITiposDAO getTiposDAO() {
        return new TiposDAO();
    }

    /**
    * This method instantiates the IUsuariosDAO class for JPA
    * that is used in this applications deployment environment to access the data.
    * @return IUsuariosDAO implementation
    */
    public IUsuariosDAO getUsuariosDAO() {
        return new UsuariosDAO();
    }
}
